The present invention relates in general to graphics processors, and in particular to systems and methods for writing graphics data for multiple (two or more) render targets from a graphics processor in a coherent fashion.
Graphics processing is an important feature of modern high-performance computing systems. In graphic processing, mathematical procedures are implemented to render (draw) graphic primitives such as triangles on a display to produce desired visual images. Real time graphics processing is based on the high-speed processing of graphic primitives to produce visually pleasing moving images.
Graphics processing is typically performed using an application program interface (API) that provides a standard software interface that can be run on multiple platforms, operating systems, and hardware. Examples of APIs include the Open Graphics Library (OpenGL), Direct3D. and DirectX10 (DX10). In general, APIs include a predetermined, standardized set of commands that are executed by associated hardware. For example, in a computer system that supports OpenGL, the operating system and application software programs make calls according to OpenGL without having to “know” any specifics regarding the system hardware and without concern as to how those commands will be implemented in the system hardware.
APIs are particularly beneficial when supported by dedicated hardware. High-speed processing of graphical images is often performed using special graphics processing units (GPUs). A GPU can be designed to rapidly process graphics commands for output to a target (e.g., a CRT display).
Recently, graphics APIs allow for output to multiple render targets (MRT). With MRT, the GPU renders graphics output to not just one output target, but to two or more (e.g., up to eight) output targets.
During multiple render target rendering, updates are performed on multiple targets. Deferred shading is one example of MRT. In deferred shading, multiple intermediate shading parameters are written by one shader as MRTs (e.g. diffuse and specular color, surface normal, etc.) with a secondary shader reading these intermediate values and performing the remainder of the shading processing.